home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1996 May: Tool Chest / Developer CD Series May 1996 (Tool Chest) (Apple Computer) (1996).iso / Sample Code / Snippets / AOCE / DragBusinessCard / Enumerate.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-08-11  |  2.3 KB  |  93 lines  |  [TEXT/MPS ]

  1. /*
  2.  * Enumerate.c
  3.  */
  4.  
  5. #include "SimpleDrag.h"
  6.  
  7.  
  8.  
  9. static pascal Boolean myForEachDirEnumSpec (long clientData, const DirEnumSpec *enumSpec);
  10.  
  11. #define     kEnumBufferSize        (4096)    /* Working data buffer    */
  12.  
  13.  
  14. /*****************************************************************
  15.  *    DoEnumerateGet
  16.  *
  17.  *
  18.  *****************************************************************/
  19.  
  20. OSErr DoEnumerateGet(short        dsRefNum, 
  21.                      long         clientData,
  22.                      RStringPtr   recordType,
  23.                      AuthIdentity identity)
  24. {
  25. OSErr          err;
  26. RStringPtr     typeList[1];
  27. DirParamBlock  dirParamBlock;
  28. Ptr            buffer;
  29.     
  30. #define        GET   (dirParamBlock.enumerateGetPB)
  31. #define        PARSE (dirParamBlock.enumerateParsePB)
  32.  
  33.  
  34.    buffer = NewPtr(kEnumBufferSize);
  35.    if (buffer == NULL)
  36.       err = MemError();
  37.    else 
  38.    {
  39.       GET.dsRefNum = dsRefNum;
  40.       GET.identity = 0;
  41.  
  42.       GET.aRLI = NULL;    /* ignored if non-zero dsRefNum is passed */
  43.       GET.startingPoint = 0;
  44.       GET.sortBy = kSortByType;
  45.       GET.sortDirection = kSortForwards;
  46.       typeList[0] = recordType;
  47.       GET.typesList = &typeList;
  48.       GET.typeCount = 1;
  49.       GET.enumFlags = kEnumPseudonymMask;
  50.       GET.includeStartingPoint = true;
  51.       GET.matchNameHow = kMatchAll;
  52.       GET.matchTypeHow = kExactMatch;
  53.       GET.getBuffer = buffer;
  54.       GET.getBufferSize = kEnumBufferSize;
  55.       err = DirEnumerateGet (&dirParamBlock, false);
  56.  
  57.       if (err == noErr || err == kOCEMoreData)
  58.       {
  59.          PARSE.clientData = clientData;
  60.          PARSE.eachEnumSpec = myForEachDirEnumSpec;
  61.  
  62.          err = DirEnumerateParse (&dirParamBlock, false);
  63.       }
  64.    }
  65.                 
  66.    return (err);
  67. #undef GET
  68. #undef PARSE
  69.  
  70. }
  71.  
  72. /*****************************************************************
  73.  *    myForEachDirEnumSpec 
  74.  *
  75.  *
  76.  *****************************************************************/
  77.  
  78. static pascal Boolean myForEachDirEnumSpec (long clientData,
  79.                                             const DirEnumSpec *enumSpec)
  80. {
  81. OSErr err;
  82.  
  83.    if ((enumSpec->enumFlag & kEnumPseudonymMask))
  84.     {
  85.           err = OCECopyLocalRecordID(&enumSpec->u.recordIdentifier,
  86.                                    (LocalRecordIDPtr)clientData);
  87.         
  88.           return (true);  /* stop, we found it */
  89.     }
  90.     else
  91.           return (false);  /* get next one */
  92. }
  93.